PySide Advanced Examples/de

Einleitung

Der Zweck dieser Seite ist es, Beispiele auf fortgeschrittenem Niveau für die PySide-GUI-Verwaltung zu behandeln (es gibt begleitende Seiten PySide Beispiele für Anfänger und PySide-Beispiele für fortgeschrittene Anfänger).

Durch Verwenden des in FreeCAD enthaltenen Moduls PySide haben wir die volle Kontrolle über seine Oberfläche. Wir können zum Beispiel:

Eine Referenz auf das Hauptfenster erstellen

Soll an der FreeCAD-Oberfläche gearbeitet werden, muss als allererstes eine Referenz auf das FreeCAD-Hauptfenster erstellt werden:

import sys
from PySide import QtGui ,QtCore 
app = QtGui.qApp
mw = FreeCADGui.getMainWindow()

Durchsuchen der untergeordneten Elemente des Hauptfensters

Dann können beispielsweise alle Widgets der Benutzeroberfläche durchsucht werden:

for child in mw.children():
   print('widget name = ', child.objectName(), ', widget type = ', child)

Die Widgets in einer Qt-Schnittstelle sind normalerweise in „Container“-Widgets verschachtelt, sodass die untergeordneten Elemente unseres Hauptfensters selbst andere untergeordnete Elemente enthalten können. Je nach Widget-Art gibt es viele Dinge, die man tun kann. Siehe die API-Dokumentation, um zu entdecken, was möglich ist.

Neues Widget manuell hinzufügen

Das Hinzufügen eines neuen Widgets, beispielsweise eines DockWidgets (das in einer der Seitenleisten von FreeCAD platziert werden kann), ist einfach:

myWidget = QtGui.QDockWidget()
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)

Dann können Dinge direkt zu dem Widget hinzugefügt werden:

myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(300,100)) # sets size of the widget
label = QtGui.QLabel("Hello World", myWidget) # creates a label
label.setGeometry(QtCore.QRect(2,50,200,24))  # sets its size
label.setObjectName("myLabel") # sets its name, so it can be found by name

Neues Widget durch Erstellen eines UI-Objekts hinzufügen

Eine bevorzugte Methode ist jedoch, ein Objekt der Benutzeroberfläche (UI-Objekt) zu erstellen, das die gesamte Einrichtung des Widgets auf einmal übernimmt. Der große Vorteil besteht darin, dass ein solches UI-Objekt mit dem Programm Qt Designer grafisch erstellt werden kann. Ein typisches von Qt Designer generiertes Objekt sieht folgendermaßen aus:

class myWidget_Ui(object):
  def setupUi(self, myWidget):
    myWidget.setObjectName("my Nice New Widget")
    myWidget.resize(QtCore.QSize(300,100).expandedTo(myWidget.minimumSizeHint())) # sets size of the widget

    self.label = QtGui.QLabel(myWidget) # creates a label
    self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
    self.label.setObjectName("label") # sets its name, so it can be found by name

  def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets
    myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8))
    self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))

Um es zu verwenden, muss es nur wie folgt auf das neu erstellte Widget angewendet werden:

app = QtGui.qApp
FCmw = app.activeWindow()
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window

Laden der Benutzeroberfläche aus einer Qt Designer .ui-Datei

Der Schlüssel zum erfolgreichen Laden einer UI-Datei ist die Verwendung des vollständigen Pfads zur Datei. Der Addon-Manager macht es beispielsweise so:

self.dialog = FreeCADGui.PySideUic.loadUi(os.path.join(os.path.dirname(__file__), "AddonManager.ui"))